import XCTest

final class SwiftUI_DemoUITests: XCTestCase {
    var app: XCUIApplication!
    
    override func setUpWithError() throws {
        continueAfterFailure = false
        app = XCUIApplication()
        app.launch()
        
        app.buttons["登录"].tap()
    }
    
    func testLoginViewElements() throws {
        // 验证基本UI元素是否存在
        XCTAssertTrue(app.buttons["xmark"].exists)
        XCTAssertTrue(app.images["logo"].exists)
        XCTAssertTrue(app.staticTexts["欢迎回来"].exists)
        XCTAssertTrue(app.staticTexts["心存善，水润物"].exists)
        XCTAssertTrue(app.textFields["请输入手机号/身份证号"].exists)
        XCTAssertTrue(app.buttons["注册/登录"].exists)
    }
    
    func testPhoneNumberValidation() throws {
        let phoneNumberTextField = app.textFields["请输入手机号/身份证号"]
        let loginButton = app.buttons["注册/登录"]
        
        // 测试无效的手机号
        phoneNumberTextField.tap()
        phoneNumberTextField.typeText("1234567890")
        XCTAssertFalse(loginButton.isEnabled)
        
        // 测试有效的手机号
        phoneNumberTextField.tap()
        phoneNumberTextField.clearText()
        phoneNumberTextField.typeText("13800138000")
        // 注意：此时登录按钮仍应禁用，因为还未同意服务协议
        XCTAssertFalse(loginButton.isEnabled)
    }
    
    func testTermsAgreement() throws {
        let loginButton = app.buttons["注册/登录"]
        let termsCheckbox = app.buttons["circle"]
        
        // 输入有效手机号
        let phoneNumberTextField = app.textFields["请输入手机号/身份证号"]
        phoneNumberTextField.tap()
        phoneNumberTextField.typeText("13800138000")
        
        // 测试服务协议勾选
        XCTAssertFalse(loginButton.isEnabled)
        termsCheckbox.tap()
        XCTAssertTrue(loginButton.isEnabled)
        
        // 取消勾选
        termsCheckbox.tap()
        XCTAssertFalse(loginButton.isEnabled)
    }
    
    func testLoginProcess() throws {
        let phoneNumberTextField = app.textFields["请输入手机号/身份证号"]
        let termsCheckbox = app.buttons["terms_checkbox"]
        let loginButton = app.buttons["注册/登录"]
        
        // 准备登录
        phoneNumberTextField.tap()
        phoneNumberTextField.typeText("13800138000")
        termsCheckbox.tap()
        
        // 执行登录
        XCTAssertTrue(loginButton.isEnabled)
        loginButton.tap()
        
        // 验证加载状态
        let progressIndicator = app.activityIndicators.firstMatch
        XCTAssertTrue(progressIndicator.exists)
        
        // 等待登录完成（模拟接口延迟1秒）
        let disappearExpectation = expectation(for: NSPredicate(format: "exists == false"), evaluatedWith: progressIndicator, handler: nil)
        wait(for: [disappearExpectation], timeout: 2.0)
    }
}

extension XCUIElement {
    func clearText() {
        guard let stringValue = self.value as? String else {
            return
        }
        
        // 点击文本框以激活它
        tap()
        
        // 删除现有文本
        let deleteString = String(repeating: XCUIKeyboardKey.delete.rawValue, count: stringValue.count)
        typeText(deleteString)
    }
}
